home *** CD-ROM | disk | FTP | other *** search
- /*
- kopeteprotocol.h - Kopete Protocol
-
- Copyright (c) 2002 by Duncan Mac-Vicar Prett <duncan@kde.org>
- Copyright (c) 2002-2003 by Martijn Klingens <klingens@kde.org>
- Copyright (c) 2002-2004 by Olivier Goffart <ogoffart@ tiscalinet.be>
-
- Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
-
- *************************************************************************
- * *
- * This library is free software; you can redistribute it and/or *
- * modify it under the terms of the GNU Lesser General Public *
- * License as published by the Free Software Foundation; either *
- * version 2 of the License, or (at your option) any later version. *
- * *
- *************************************************************************
- */
-
- #ifndef KOPETEPROTOCOL_H
- #define KOPETEPROTOCOL_H
-
- #include "kopeteplugin.h"
- #include "kopeteonlinestatus.h"
-
- class KopeteEditAccountWidget;
- class AddContactPage;
-
- #include "kopete_export.h"
-
- namespace Kopete
- {
-
- class Contact;
- class MetaContact;
- class Account;
-
- /*namespace UI
- {
- class EditAccountWidget;
- class AddContactPage;
- }*/
-
-
- /**
- * @brief base class of every protocols.
- *
- * A protocol is just a particular case of Plugin
- *
- * Protocol is an abstract class, you need to reimplement createNewAccount,
- * createAddContactPage, createEditAccountWidget
- *
- *
- * @author Duncan Mac-Vicar Prett <duncan@kde.org>
- * @author Martijn Klingens <klingens@kde.org>
- * @author Olivier Goffart <ogoffart @ tiscalinet.be>
- */
- class KOPETE_EXPORT Protocol : public Plugin
- {
- Q_OBJECT
-
- public:
-
- /**
- * @todo Ideally, the destructor should be protected. but we need it public to allow QPtrList<Protocol>
- */
- virtual ~Protocol();
-
- /**
- * @brief Create an empty Account
- *
- * This method is called during the loading of the config file.
- * @param accountId - the account ID to create the account with. This is usually
- * the login name of the account
- *
- * you don't need to register the account to the AccountManager in this function.
- * But if you want to use this function don't forget to call @ref AccountManager::registerAccount
- *
- * @return The new @ref Account object created by this function
- */
- virtual Account *createNewAccount( const QString &accountId ) = 0;
-
- /**
- * @brief Create a new AddContactPage widget to be shown in the Add Contact Wizard.
- *
- * @return A new AddContactPage to be shown in the Add Contact Wizard
- */
- virtual AddContactPage *createAddContactWidget( QWidget *parent, Account *account ) = 0;
-
- /**
- * @brief Create a new KopeteEditAccountWidget
- *
- * @return A new KopeteEditAccountWidget to be shown in the account part of the configurations.
- *
- * @param account is the KopeteAccount to edit. If it's 0L, then we create a new account
- * @param parent The parent of the 'to be returned' widget
- */
- virtual KopeteEditAccountWidget * createEditAccountWidget( Account *account, QWidget *parent ) = 0;
-
-
- /**
- * @brief a bitmask of the capabilities of this protocol
- * @sa @ref setCapabilities
- */
- unsigned int capabilities() const ;
-
-
- /**
- * @brief Available capabilities
- *
- * @ref capabilities() returns an ORed list of these, which
- * the edit widget interperts to determine what buttons to show
- */
- enum Capabilities
- {
- BaseFgColor = 0x1, ///< Setting the bg color of the whole edit widget / message
- BaseBgColor = 0x2, ///< Setting the fg color of the whole edit widget / message
- RichFgColor = 0x4, ///< Setting the fg/bg color of text portions individually
- RichBgColor = 0x8, ///< Setting the fg/bg color of text portions individually
-
- BaseFont = 0x10, ///< Setting the font of the whole edit widget / message
- RichFont = 0x20, ///< Setting the font of text portions individually
-
- /// Setting the formatting of the whole edit widget / message
- BaseUFormatting = 0x40,
- BaseIFormatting = 0x80,
- BaseBFormatting = 0x100,
-
- /// Setting the formatting of text portions individually
- RichUFormatting = 0x200,
- RichIFormatting = 0x400,
- RichBFormatting = 0x800,
-
- Alignment = 0x1000, ///< Setting the alignment of text portions
-
- /// Setting the formatting of the whole edit widget / message
- BaseFormatting = BaseIFormatting | BaseUFormatting | BaseBFormatting,
-
- /// Setting the formatting of text portions individually
- RichFormatting = RichIFormatting | RichUFormatting | RichBFormatting,
-
- RichColor = RichBgColor | RichFgColor,
- BaseColor = BaseBgColor | BaseFgColor,
-
- //Shortcut for All of the above - full HTML
- FullRTF = RichFormatting | Alignment | RichFont | RichFgColor | RichBgColor ,
-
-
- CanSendOffline = 0x10000 ///< If it's possible to send offline messages
- };
-
- /**
- * @brief Returns the status used for contacts when accounts of this protocol are offline
- */
- Kopete::OnlineStatus accountOfflineStatus() const;
-
-
- protected:
- /**
- * @brief Constructor for Protocol
- *
- * @param instance The protocol's instance, every plugin needs to have a KInstance of its own
- * @param parent The protocol's parent object
- * @param name The protocol's name
- */
- Protocol( KInstance *instance, QObject *parent, const char *name );
-
- /**
- * @brief Sets the capabilities of this protcol.
- *
- * The subclass contructor is a good place for calling it.
- * @sa @ref capabilities()
- */
- void setCapabilities( unsigned int );
-
- public:
-
- /**
- * Reimplemented from Kopete::Plugin.
- *
- * This method disconnects all accounts and deletes them, after which it
- * will emit readyForUnload.
- *
- * Note that this is an asynchronous operation that may take some time
- * with active chats. It's no longer immediate as it used to be in
- * Kopete 0.7.x and before. This also means that you can do a clean
- * shutdown.
- * @note The method is not private to allow subclasses to reimplement
- * it even more, but if you need to do this please explain why
- * on the list first. It might make more sense to add another
- * virtual for protocols that's called instead, but for now I
- * actually think protocols don't need their own implementation
- * at all, so I left out the necessary hooks on purpose.
- * - Martijn
- */
- virtual void aboutToUnload();
-
- private slots:
- /**
- * @internal
- * The account changed online status. Used while unloading the protocol.
- */
- void slotAccountOnlineStatusChanged( Kopete::Contact *self );
-
- /**
- * @internal
- * The account is destroyed. When it's the last account we emit the
- * readyForUnload signal. Used while unloading the protocol.
- */
- void slotAccountDestroyed( );
-
-
- public:
-
- /**
- * @brief Deserialize the plugin data for a meta contact.
- *
- * This method splits up the data into the independent Kopete::Contact objects
- * and calls @ref deserializeContact() for each contact.
- *
- * Note that you can still reimplement this method if you prefer, but you are
- * strongly recommended to use this version of the method instead, unless you
- * want to do _VERY_ special things with the data...
- *
- * @todo we probably should think to another way to save the contacltist.
- */
- virtual void deserialize( MetaContact *metaContact, const QMap<QString, QString> &serializedData );
-
- /**
- * @brief Deserialize a single contact.
- *
- * This method is called by @ref deserialize() for each separate contact,
- * so you don't need to add your own hooks for multiple contacts in a single
- * meta contact yourself. @p serializedData and @p addressBookData will be
- * the data the contact provided in Kopete::Contact::serialize.
- *
- * The default implementation does nothing.
- *
- * @return The contact created from the data
- * @sa Contact::serialize
- *
- * @todo we probably should think to another way to save the contacltist.
- */
- virtual Contact *deserializeContact( MetaContact *metaContact,
- const QMap<QString, QString> &serializedData,
- const QMap<QString, QString> &addressBookData );
-
-
-
- public slots:
- /**
- * A meta contact is about to save.
- * Call serialize() for all contained contacts for this protocol.
- * @internal
- * it's public because for example, Contact::setMetaContact uses it.
- * @todo we probably should think to another way to save the contacltist.
- */
- void slotMetaContactAboutToSave( Kopete::MetaContact *metaContact );
-
-
- private:
- class Private;
- Private *d;
- };
-
- } //END namespace kopete
-
- #endif
-
-